package handlers

import (
	"cloudgo/models"
	"fmt"
	"math/rand"
	"net/http"
	"strconv"
	"sync"
	"time"
)

// LoginHandler 用户登陆api，接受post方法
func LoginHandler(w http.ResponseWriter, r *http.Request) {
	// post方法
	// 解析参数
	r.ParseForm()
	rand.Seed(time.Now().Unix())
	// 随机整数为id
	userID := strconv.Itoa(rand.Int() % (10e9))
	// 获取用户名和密码
	userName := r.Form["username"][0]
	userPass := r.Form["password"][0]

	// 判断用户是否已经存在，如若存在，更改login字段即可
	username := r.Form["username"][0]
	// 遍历用户数据来判断是否登陆过
	// 如果登陆过，已经存储了id，不需要重新生成
	for k, v := range models.Users {
		if v.UserName == username {
			// 如果登陆过，返回yes
			v.LogIn = true
			fmt.Println(k, userName, userPass)
			http.Redirect(w, r, "/user/"+k, 301)
			return
		}
	}
	fmt.Println(userID, userName, userPass)
	// 运行时内存记忆
	mutex := sync.Mutex{}
	mutex.Lock()
	models.Users[userID] = &models.User{
		UserID:   userID,
		UserName: userName,
		UserPass: userPass,
		LogIn:    true,
	}
	mutex.Unlock()
	// 跳转到登陆后的详情页
	// 这里使用重定向即可
	http.Redirect(w, r, "/user/"+userID, 301)
}

// JudgeHandler 根据用户名判断是否登陆过
func JudgeHandler(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	// 获取用户名
	username := r.Form["username"][0]
	// 遍历用户数据来判断是否登陆过
	for _, v := range models.Users {
		if v.UserName == username && v.LogIn {
			// 如果登陆过，返回yes
			w.Write([]byte("yes"))
			return
		}
	}
	// 否则没登陆过，返回no
	w.Write([]byte("no"))
}

// LogoutHandler 退出登陆的api
func LogoutHandler(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	// 获取用户名
	userID := r.Form["userID"][0]
	// 遍历用户数据来判断是否登陆过
	for k, v := range models.Users {
		if k == userID && v.LogIn {
			// 如果登陆过，要退出的话设置Login
			v.LogIn = false
			w.Write([]byte("yes"))
			return
		}
	}
	// 否则该用户没登陆过，不该退出
	w.Write([]byte("Wrong logout Because of Never been logon"))
}
